<?php

/**
 * autocompletar actions.
 *
 * @package    SIFI
 * @subpackage autocompletar
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
 */
class autocompletarActions extends sfActions
{
    public function executeAutocompletar()
    {
        Propel::setLogger(sfLogger::getInstance());
        $patrones = $this->getRequestParameter('patron');
        $clase =  $this->getRequestParameter('clase').'Peer';
        $metodo = $this->getRequestParameter('metodo_auto', 'doSelect');  
        $join =   $this->getRequestParameter('join'); 
        $order =  $this->getRequestParameter('order');
        $funcionesActualizar = $this->getRequestParameter('funcionesActualizar');
        
        if($funcionesActualizar != null)
       {
            $funcionesActualizar = explode( "--", $funcionesActualizar);
       }
          
        $c = new Criteria();
        try
        {  
            
        // Agrega los parametros de ordenamiento
        if($order && is_array($order))
        {
            foreach($order as $ord)
            {
                $col = explode("--", $ord); 
                
                if($col[1] == 'desc')
                {
                    $c->addDescendingOrderByColumn($col[0]);
                }else
                {
                    $c->addAscendingOrderByColumn($col[0]);
                }
            }
        }
         
        // Agrega Joins   
        if($join && is_array($join))
        foreach($join as $j)
        {
            $js = explode("--", $j);  
            $js1 = Wincombo::obtemerNombreColumnaConFormato($js[0]);
            $js2 = Wincombo::obtemerNombreColumnaConFormato($js[1]);
            $c->addJoin($js1, $js2);
        }

        foreach($patrones as $key=>$val)
        {
            if(!$val)continue;
            $cr = explode(".", $key);  
            if(is_array($cr) && count($cr)>1)
            { 
                $col = call_user_func(array(ucfirst($cr[0])."Peer"  , 'translateFieldName'), strtolower($cr[1]), BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME);                                            
                $c->add( "$col" , $val);
            } else
            {
                $col = call_user_func(array($clase  , 'translateFieldName'), $key, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME); 
                $col_criterio = "$col";
		    	$map =  call_user_func(array($clase  , 'getTableMap')); 
			    if($map)
			    {
	            	$column_map = $map->getColumn(strtoupper($key));
					if($column_map)
					{
						if(in_array( $column_map->getType(), array('INTEGER', 'BIGINT')) )
						{
							eval("\$c->add(\"$col_criterio\", ".$val.");");
		
						}else
						{
							eval("\$c->add(\"$col_criterio\", \"".$val."%\", Criteria::ILIKE);");
						}
					}
			    }

            }
        }
 
        $elementos = call_user_func(array($clase, $metodo), $c);    
        $info = array();
		//sfLogger::getInstance()->info("-------------> ".count($elementos));
        $html = "<ul>";
        foreach($elementos as $e)
         {
             $metInfo = 'infoAutocompletar';
           /* if(!is_callable(array($e, 'infoAutocompletar')))
            {
                $info =  $e->toArray(); 
            }else
            {
                $info =  $e->$metInfo();
            } */
            $info =  $e->$metInfo();
            
            if($funcionesActualizar && is_array($funcionesActualizar))
            foreach($funcionesActualizar as $funcion)
            {
                 if(is_callable(array($e, $funcion)))
                 {
                    $info[] =  $e->$funcion();
                 }else
                 {
                    $info[] =  "-- ".$funcion." no implementada";
                 }
            }
            $cad = implode('###', $info); 
           // $cad = implode('###', $info).'|';
            $html .=  "<li id=\"".$cad."\">".$e->__toString()."</li>";

         }
         $html .= "</ul>";
            
        }catch(Exception $e)
        {
            $html = "<ul><li>Auto no implementado###".$e->getMessage()."</li></ul>";
        }

        $this->renderText($html);

        return sfView::NONE;

    }
    
}
